package br.com.cicero.futebol.controle;

import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;

import br.com.cicero.futebol.modelo.entidades.Jogador;
import br.com.cicero.futebol.modelo.entidades.Posicao;
import br.com.cicero.futebol.modelo.entidades.Time;
import br.com.cicero.futebol.modelo.repositorios.JogadorRepository;
import br.com.cicero.futebol.modelo.repositorios.TimeRepository;

@ManagedBean
public class JogadorBean {
	
	private Jogador jogador = new Jogador();
	private Long timeID;
	private List<Jogador> jogadores;
	
	public void adiciona() {
		
		EntityManager em = this.getManager();
		TimeRepository timeRepository = new TimeRepository(em);
		JogadorRepository jogadorRepository = new JogadorRepository(em);
		
		if (this.timeID != null) {
			
			Time time = timeRepository.procura(this.timeID);
			this.jogador.setTime(time);
			
		}
		
		if (this.jogador.getId() == null) {
			
			jogadorRepository.adiciona(this.jogador);
			
		} else {
			
			jogadorRepository.atualiza(this.jogador);
			
		}
		
		this.jogador = new Jogador();
		this.jogadores = null;
				
	}
	
	public void preparaAlteracao() {
		
		Map<String, String> params = FacesContext.getCurrentInstance().
				getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager em = this.getManager();
		JogadorRepository repository = new JogadorRepository(em);
		this.jogador = repository.procura(id);
				
	}
	
	public void remove() {
		
		Map<String, String> params = FacesContext.getCurrentInstance().
				getExternalContext().getRequestParameterMap();
		Long id = Long.parseLong(params.get("id"));
		EntityManager em = this.getManager();
		JogadorRepository repository = new JogadorRepository(em);
		repository.remove(id);
		this.jogador = null;
				
	}
	
	public List<Jogador> getJogadores() {
		
		if (this.jogadores == null) {
			
			EntityManager em = this.getManager();
			JogadorRepository repository = new JogadorRepository(em);
			this.jogadores = repository.getLista();
			
		}
		
		return this.jogadores;
		
	}
	
	private EntityManager getManager() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext ec = context.getExternalContext();
		HttpServletRequest request = (HttpServletRequest) ec.getRequest();
		
		return (EntityManager) request.getAttribute("EntityManager");
		
	}
	
	public Posicao[] getPosicoes() {
		
		return Posicao.values();
		
	}

	public Jogador getJogador() {
		return jogador;
	}

	public void setJogador(Jogador jogador) {
		this.jogador = jogador;
	}

	public Long getTimeID() {
		return timeID;
	}

	public void setTimeID(Long timeID) {
		this.timeID = timeID;
	}

	public void setJogadores(List<Jogador> jogadores) {
		this.jogadores = jogadores;
	}
	
}
